JavaMail实现收发邮件(五)使用SSL实现加密传输 |
您所在的位置:网站首页 › java sendmail › JavaMail实现收发邮件(五)使用SSL实现加密传输 |
首页 » Java » JavaSe » 正文 JavaMail实现收发邮件(五)使用SSL实现加密传输 2015/12/05 | JavaSe | admin | 6 条评论 | 16489 views一 概念简介 Secure Socket Layer,为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取及窃听。一般通用之规格为40 bit之安全标准,美国则已推出128 bit之更高安全标准,但限制出境。只要3.0版本以上之I.E.或Netscape浏览器即可支持SSL。 当前版本为3.0。它已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。 (PS:来至百度百科) 二 在JavaMail中使用SSL对邮件发送进行加密 实际上大部分操作都跟普通的邮件发送是一样的,只是有两个地方有所变化。(1)传输端口从25改成465;(2)替换默认的socketFactory 下面我以163邮箱实现的SSL传输举例说明,下图是163邮箱官方给出的相关配置信息: 代码如下,关键地方有注释,就不多说了: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186package javamail.zifangsky.com; import java.io.UnsupportedEncodingException;import java.util.ArrayList;import java.util.Date;import java.util.List;import java.util.Properties; import javax.activation.DataHandler;import javax.activation.FileDataSource;import javax.mail.Address;import javax.mail.BodyPart;import javax.mail.Multipart;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeBodyPart;import javax.mail.internet.MimeMessage;import javax.mail.internet.MimeMultipart;import javax.mail.internet.MimeUtility; public class SendMailBySSL { private final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory"; private String smtpServer; // SMTP服务器地址 private String port; // 端口 private String username; // 登录SMTP服务器的用户名 private String password; // 登录SMTP服务器的密码 private List recipients = new ArrayList(); // 收件人地址集合 private String subject; // 邮件主题 private String content; // 邮件正文 private List attachmentNames = new ArrayList(); // 附件路径信息集合 public SendMailBySSL() { } public SendMailBySSL(String smtpServer, String port, String username, String password, List recipients, String subject, String content, List attachmentNames) { this.smtpServer = smtpServer; this.port = port; this.username = username; this.password = password; this.recipients = recipients; this.subject = subject; this.content = content; this.attachmentNames = attachmentNames; } public void setSmtpServer(String smtpServer) { this.smtpServer = smtpServer; } public void setPort(String port) { this.port = port; } public void setUsername(String username) { this.username = username; } public void setPassword(String password) { this.password = password; } public void setRecipients(List recipients) { this.recipients = recipients; } public void setSubject(String subject) { this.subject = subject; } public void setContent(String content) { this.content = content; } public void setAttachmentNames(List attachmentNames) { this.attachmentNames = attachmentNames; } /** * 进行base64加密,防止中文乱码 * */ public String changeEncode(String str) { try { str = MimeUtility.encodeText(new String(str.getBytes(), "UTF-8"), "UTF-8", "B"); // "B"代表Base64 } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return str; } /** * 正式发邮件 * */ public boolean sendMail() { Properties properties = new Properties(); properties.put("mail.smtp.host", smtpServer); properties.put("mail.smtp.auth", "true"); properties.put("mail.smtp.socketFactory.class", SSL_FACTORY); //使用JSSE的SSL socketfactory来取代默认的socketfactory properties.put("mail.smtp.socketFactory.fallback", "false"); // 只处理SSL的连接,对于非SSL的连接不做处理 properties.put("mail.smtp.port", port); properties.put("mail.smtp.socketFactory.port", port); Session session = Session.getInstance(properties); session.setDebug(true); MimeMessage message = new MimeMessage(session); try { // 发件人 Address address = new InternetAddress(username); message.setFrom(address); // 收件人 for (String recipient : recipients) { System.out.println("收件人:" + recipient); Address toAddress = new InternetAddress(recipient); message.setRecipient(MimeMessage.RecipientType.TO, toAddress); // 设置收件人,并设置其接收类型为TO /** * TO:代表有健的主要接收者。 CC:代表有健的抄送接收者。 BCC:代表邮件的暗送接收者。 * */ } // 主题 message.setSubject(changeEncode(subject)); // 时间 message.setSentDate(new Date()); Multipart multipart = new MimeMultipart(); // 添加文本 BodyPart text = new MimeBodyPart(); text.setText(content); multipart.addBodyPart(text); // 添加附件 for (String fileName : attachmentNames) { BodyPart adjunct = new MimeBodyPart(); FileDataSource fileDataSource = new FileDataSource(fileName); adjunct.setDataHandler(new DataHandler(fileDataSource)); adjunct.setFileName(changeEncode(fileDataSource.getName())); multipart.addBodyPart(adjunct); } // 清空收件人集合,附件集合 recipients.clear(); attachmentNames.clear(); message.setContent(multipart); message.saveChanges(); } catch (Exception e) { e.printStackTrace(); return false; } try { Transport transport = session.getTransport("smtp"); transport.connect(smtpServer, username, password); transport.sendMessage(message, message.getAllRecipients()); transport.close(); } catch (Exception e) { e.printStackTrace(); return false; } return true; } public static void main(String[] args) { List recipients = new ArrayList();// recipients.add("[email protected]"); recipients.add("[email protected]"); String subject = "这封邮件是为了测试SMTP的SSL加密传输"; String content = "这是这封邮件的正文"; List attachmentNames = new ArrayList(); attachmentNames.add("C://Users//Administrator//Desktop//kali.txt"); SendMailBySSL sendMailBySSL = new SendMailBySSL("smtp.163.com", "465", "[email protected]", "youpassword", recipients, subject, content, attachmentNames); sendMailBySSL.sendMail(); } }三 测试结果如下 附:其他的几篇相关文章: JavaMail实现收发邮件(一)相关概念概述 JavaMail实现收发邮件(二)发送邮件 JavaMail实现收发邮件(三)接收邮件 JavaMail实现收发邮件(四)各大主流邮件服务器地址 赞 (4) JavaMail SSL 加密©版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。转载请注明来源:JavaMail实现收发邮件(五)使用SSL实现加密传输 - zifangsky的个人博客 上一篇 下一篇 你可能也喜欢: 在Java中实现AES加解密 LAMP环境添加SSL证书,使网站变成HTTPS加密传输 在Java中利用Apache Commons Codec API实现常见的加密解密算法,如:md5,sha256 指定长度的数组的子集的排列情况算法 解决Jackson反序列化XML爆 MismatchedInputException 的异常 本文共 6 个回复通过jsp怎么调用这个class 发送邮件呢?? 望作者在写个详细的告知感激不尽,实在是不会 回复 @ 船长 从你的回复就看出你应该才刚学Java后台开发 @ admin 亲,你说对了,问题是jsp页面中怎么调用这个方法我不会,,,jsp可以直接调用这个class的方法吗?? 能麻烦您给个详细的代码吗?? 感谢楼主 回复@ 船长 你直接把这里的代码逻辑copy到JSP页面里面不就可以了吗?你不会说你连在JSP页面写Java代码都不会吧?关于这点你还是自己去百度吧 回复32个赞。成功了 回复@ 秋枫 ←_← 回复 发表评论 取消 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |